package com.yangzhang.blog.service;

import java.util.Map;
import java.util.Set;

/**
 * redis 操作
 * @author YangZhang
 * @version 1.0.0
 * @createTime 2022年08月29日 22:29:00
 */
public interface RedisService {
    boolean sIsMember(String key, Object value);
    Long hIncr(String key, String hashKey, Long delta);
    Long incr(String key, long delta);
    Long sAdd(String key, Object... values);
    Object get(String key);

    /**
     * 删除Set结构中的属性
     *
     * @param key    key
     * @param values value集合
     * @return 删除掉的数据量
     */
    Long sRemove(String key, Object... values);
    /**
     * Hash结构中属性递减
     *
     * @param key     外部key
     * @param hashKey 内部key
     * @param delta   递增条件
     * @return 返回递减后的数据
     */
    Long hDecr(String key, String hashKey, Long delta);

    /**
     * 保存属性
     *
     * @param key   key值
     * @param value value值
     * @param time  时间戳
     */
    void set(String key, Object value, long time);
    /**
     * 保存属性
     *
     * @param key   key值
     * @param value value值
     */
    void set(String key, Object value);
    /**
     * 获取Set结构
     *
     * @param key key
     * @return 返回set集合
     */
    Set<Object> sMembers(String key);
    /**
     * 获取Set结构的长度
     *
     * @param key key
     * @return 返回长度
     */
    Long sSize(String key);
    /**
     * 获取zset指定元素分数
     *
     * @param key   关键
     * @param value 价值
     * @return {@link Double}
     */
    Double zScore(String key, Object value);
    /**
     * 获取Hash结构中的属性
     *
     * @param key     外部key值
     * @param hashKey 内部key值
     * @return 返回内部key的value
     */
    Object hGet(String key, String hashKey);

    /**
     * 删除属性
     *
     * @param key key值
     * @return 返回成功
     */
    Boolean del(String key);
    /**
     * zset根据分数排名获取指定元素信息
     *
     * @param key   关键
     * @param start 开始
     * @param end   结束
     * @return {@link Map <Object, Double>}
     */

    Map<Object, Double> zReverseRangeWithScore(String key, long start, long end);
    /**
     * 获取zset所有分数
     *
     * @param key 关键
     * @return {@link Map}
     */
    Map<Object, Double> zAllScore(String key);
    /**
     * 获取自增1后的 值
     *
     * @param key  key值
     * @param time 过期时间
     * @return 返回递增后结果
     */
    Long incrExpire(String key, long time);
    /**
     * 直接获取整个Hash结构
     *
     * @param key 外部key值
     * @return 返回hashMap
     */
    Map<String, Object> hGetAll(String key);
    /**
     * zset添加分数
     *
     * @param key   关键
     * @param value 价值
     * @param score 分数
     * @return {@link Double}
     */
    Double zIncr(String key, Object value, Double score);
}
